package com.cskaoyan.javase.oop1._13block._2static._0introduction;

/**
 * 什么是静态代码块？
 * 定义在类的成员位置，使用以下声明方式声明的代码块，称之为静态代码块
 * //成员位置
 * static{
 * }
 * //成员位置
 * 作用: 在类加载过程中,其中的代码自动被执行
 *      可以把静态代码块看成是一个类加载过程中
 *      会自动被调用的静态方法
 *      主要的作用是用来给静态成员变量赋值
 *
 * 类加载过程中,静态成员变量的赋值,有以下:
 *      1.默认初始化,具有默认值
 *      2.显式赋值
 *      3.静态代码块赋值
 * 默认初始化具有默认值最先执行,在后续类加载的过程会执行静态成员变量的显式赋值
 *      以及静态代码块
 *      执行的顺序是: 按照代码的书写顺序从上到下执行
 *
 *
 * @since 09:33
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        System.out.println(Cat.price);
    }
}

class Cat {
    static double price = 1000;

    // 静态代码块
    static {
        price = 2000;
    }

    public void test(){}
    public static void testStatic(){}

    public Cat() {
    }

    static int a = 10;
}